package com.zhang.map;


/**
 * @author 张吉鑫
 * @Description Map
 * @date 2021/3/23 20:08
 */
public interface Map<K , V> {
    /**
     * 元素数量
     * @return
     */
    int size();

    /**
     * 判断是否为空
     * @return
     */
    boolean isEmpty();

    /**
     * 清空元素
     */
    void clear();

    /**
     * 添加键值对
     * @param key
     * @param value
     * @return
     */
    V put(K key , V value);

    /**
     * 通过键获取值
     * @param key
     * @return
     */
    V get(K key);

    /**
     * 通过键删除元素
     * @param key
     * @return
     */
    V remove(K key);

    /**
     * 查看键是否存在
     * @param key
     * @return
     */
    boolean containsKey(K key);

    /**
     * 查看值是否存在
     * @param value
     * @return
     */
    boolean containsValue(V value);

    /**
     * 遍历元素
     * @param visitor
     */
    void traversal(Visitor<K , V> visitor);

    public static abstract class Visitor<K , V>{
        boolean stop;

        /**
         * 获取键值对让用户自定义使用
         * @param key
         * @param value
         * @return
         */
        public abstract boolean visit(K key,V value);
    }
}
